{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# KNN分类算法实验报告"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**20221202514 丁鑫钰 实验五**\n",
    "## 1. 实验目的\n",
    "\n",
    "1. 理解K近邻(KNN)算法的基本原理和实现过程\n",
    "2. 实现自定义的KNN分类器并与scikit-learn中的实现进行对比\n",
    "3. 探究不同K值对分类精度的影响\n",
    "4. 比较不同距离度量方法对分类效果的影响"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. 实验环境\n",
    "\n",
    "- Python 3.x\n",
    "- 主要库：numpy, pandas, matplotlib, scikit-learn\n",
    "- 数据集：Iris数据集（150个样本，4个特征，3个类别）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. 实验原理\n",
    "\n",
    "K近邻算法(K-Nearest Neighbors, KNN)是一种基于实例的非参数分类方法，其核心思想是：\n",
    "\n",
    "**如果一个样本在特征空间中的k个最相似的样本中的大多数属于某一个类别，则该样本也属于这个类别。**\n",
    "\n",
    "算法步骤：\n",
    "1. 计算待分类样本与训练集中所有样本的距离\n",
    "2. 找出距离最近的k个样本\n",
    "3. 统计这k个样本中各类别的数量\n",
    "4. 将待分类样本归为出现次数最多的类别\n",
    "\n",
    "距离度量方法：\n",
    "- 欧式距离：$d(x,y) = \\sqrt{\\sum_{i=1}^{n}(x_i - y_i)^2}$\n",
    "- 曼哈顿距离：$d(x,y) = \\sum_{i=1}^{n}|x_i - y_i|$\n",
    "- 切比雪夫距离：$d(x,y) = \\max_i |x_i - y_i|$\n",
    "- 闵可夫斯基距离：$d(x,y) = \\left(\\sum_{i=1}^{n}|x_i - y_i|^p\\right)^{1/p}$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. 实验步骤\n",
    "\n",
    "1. 加载并预处理Iris数据集\n",
    "2. 划分训练集和测试集\n",
    "3. 数据标准化处理\n",
    "4. 实现自定义KNN分类器\n",
    "5. 使用不同K值进行实验\n",
    "6. 使用不同距离度量进行实验\n",
    "7. 与scikit-learn中的KNN分类器进行对比\n",
    "8. 可视化实验结果"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5. 代码实现"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "from sklearn.metrics import accuracy_score\n",
    "\n",
    "plt.rcParams['font.sans-serif'] = ['SimHei']\n",
    "plt.rcParams['axes.unicode_minus'] = False"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 自定义KNN算法类\n",
    "class MyKNN:\n",
    "    def __init__(self, k=5, distance_metric='euclidean'):\n",
    "        self.k = k\n",
    "        self.distance_metric = distance_metric\n",
    "        self.X_train = None\n",
    "        self.y_train = None\n",
    "    \n",
    "    def fit(self, X, y):\n",
    "        self.X_train = X\n",
    "        self.y_train = y\n",
    "        return self\n",
    "    \n",
    "    def euclidean_distance(self, x1, x2):\n",
    "        return np.sqrt(np.sum((x1 - x2) ** 2))\n",
    "    \n",
    "    def manhattan_distance(self, x1, x2):\n",
    "        return np.sum(np.abs(x1 - x2))\n",
    "    \n",
    "    def chebyshev_distance(self, x1, x2):\n",
    "        return np.max(np.abs(x1 - x2))\n",
    "    \n",
    "    def minkowski_distance(self, x1, x2, p=3):\n",
    "        return np.power(np.sum(np.power(np.abs(x1 - x2), p)), 1/p)\n",
    "    \n",
    "    def calculate_distance(self, x1, x2):\n",
    "        if self.distance_metric == 'euclidean':\n",
    "            return self.euclidean_distance(x1, x2)\n",
    "        elif self.distance_metric == 'manhattan':\n",
    "            return self.manhattan_distance(x1, x2)\n",
    "        elif self.distance_metric == 'chebyshev':\n",
    "            return self.chebyshev_distance(x1, x2)\n",
    "        elif self.distance_metric == 'minkowski':\n",
    "            return self.minkowski_distance(x1, x2)\n",
    "        else:\n",
    "            raise ValueError(f\"不支持的距离度量方式: {self.distance_metric}\")\n",
    "    \n",
    "    def predict(self, X):\n",
    "        y_pred = [self._predict(x) for x in X]\n",
    "        return np.array(y_pred)\n",
    "    \n",
    "    def _predict(self, x):\n",
    "        # 计算与所有训练样本的距离\n",
    "        distances = [self.calculate_distance(x, x_train) for x_train in self.X_train]\n",
    "        \n",
    "        # 获取最近的k个样本的索引\n",
    "        k_indices = np.argsort(distances)[:self.k]\n",
    "        \n",
    "        # 获取这k个样本的标签\n",
    "        k_nearest_labels = [self.y_train[i] for i in k_indices]\n",
    "        \n",
    "        # 返回出现最多的标签\n",
    "        most_common = np.bincount(k_nearest_labels).argmax()\n",
    "        return most_common"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "数据集形状: (150, 4)\n",
      "类别分布: [50 50 50]\n",
      "训练集形状: (105, 4)\n",
      "测试集形状: (45, 4)\n",
      "\n",
      "测试不同的K值:\n",
      "K = 1, 准确率 = 0.9778\n",
      "K = 2, 准确率 = 0.9778\n",
      "K = 3, 准确率 = 1.0000\n",
      "K = 4, 准确率 = 0.9778\n",
      "K = 5, 准确率 = 1.0000\n",
      "K = 6, 准确率 = 1.0000\n",
      "K = 7, 准确率 = 1.0000\n",
      "K = 8, 准确率 = 1.0000\n",
      "K = 9, 准确率 = 1.0000\n",
      "K = 10, 准确率 = 1.0000\n",
      "K = 11, 准确率 = 1.0000\n",
      "K = 12, 准确率 = 1.0000\n",
      "K = 13, 准确率 = 1.0000\n",
      "K = 14, 准确率 = 1.0000\n",
      "K = 15, 准确率 = 1.0000\n",
      "K = 16, 准确率 = 1.0000\n",
      "K = 17, 准确率 = 1.0000\n",
      "K = 18, 准确率 = 0.9778\n",
      "K = 19, 准确率 = 1.0000\n",
      "K = 20, 准确率 = 1.0000\n",
      "\n",
      "最优K值为 3，准确率为 1.0000\n",
      "\n",
      "不同距离度量的准确率:\n",
      "euclidean: 1.0000\n",
      "manhattan: 1.0000\n",
      "chebyshev: 0.9556\n",
      "minkowski: 1.0000\n",
      "\n",
      "Scikit-learn KNN的准确率:\n",
      "准确率: 1.0000\n",
      "\n",
      "比较:\n",
      "自定义KNN (欧式距离): 1.0000\n",
      "Sklearn KNN: 1.0000\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1kAAAIfCAYAAACCdxb2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/GU6VOAAAACXBIWXMAAA9hAAAPYQGoP6dpAACEJ0lEQVR4nO3dd5xU1f3/8ffsbG9sp7cYEkXFBopJBIliRdRoNEqMEk0sP0vUYP0qYLAkCrbY8rUQ+aokkCgmgkKKaAzGEkSRFsiidHZhl23s7Ozs/f1xvbMzbJvdnbn3zszr+XjMY++0e88chjvnc87nnOsxDMMQAAAAACAqUpwuAAAAAAAkEoIsAAAAAIgigiwAAAAAiCKCLAAAAACIIoIsAAAAAIgigiwAAAAAiCKCLAAAAACIIoIsAAAAAIgigiwAQI9UV1erqqpK9fX1amxsjOhWU1Ojuro6SVJTU1PE77NuTU1NPSrr/PnzNWPGjOCxLeeff76efvrpiPaxdu3adh9fuXJlt8tTXl6uCy64QKtWrdKmTZt00kkn6csvv+z2fiRp3rx5uvDCC1VbW9vt9/7973/XL37xix4dFwDQMYIsAECPXHvttSoqKlJubq6ysrIiuvXp00cPPPCAJOnEE0+M+H3WbfLkyT0q6/PPP6/f//738ng8CgQCwcdfe+017d+/P3i/paVFjY2Nbd5fX1+vQw89VC+++GLY436/X9/+9rd16623tnvchoYGTZs2rU0A9Oqrr+qPf/yjcnNz1b9/fzU1Nen0009XQ0NDm33U1dXp888/V3l5uTZv3qzy8nKtW7dODQ0N8vv9uvfee5WXl6e8vLwOP39zc7MaGhrU0tIS9vjWrVs1ffr0NgFeIBBQXV1dm9cDACLjMQzDcLoQAID4s2fPHjU1NSkjI0MpKSlhjx911FGaPn26Lr/88rD3+P1+paenq0+fPpowYYKKi4v10EMPRXS86667TtnZ2frd734nSfJ4PHr44Yf1s5/9TJL07rvv6sQTT9Stt96q++67L/i+Xbt2adCgQXriiSf08ssva/ny5Z0e55hjjtFHH30U9thHH32ksWPHavfu3SoqKgo+/re//U0nn3yy1q9frxEjRrTZ165duzR+/Hj169dPS5YsUVZWllpaWnTIIYfo4IMP1qJFi4Kvmz9/vq677joZhiGfz6fs7GxJ0vLly3X66afL4/GooaFBeXl58vv9+sc//qGlS5fqrrvuUm5uriRp//79ys3N1X/+85+wcr799tuaMGGCMjIylJOTI4/HI8kMvlJTU8PKbBiG6urq1NTUpPLycg0bNqzT+gIAtJXa9UsAAGiruLi43cdvueUWlZWV6frrr1daWlqH7/d6vcrNzdXgwYMVCASUlpYWbPyHampqUlpamnJyctoEBJZ9+/bpkksu0dixY3XPPfeEPffQQw8pPT1dF110kc466yx5vV6lpaWpqqpKBx10kBYuXKiTTjpJkhmkhI50NTQ0aPv27Xr33Xd16KGHau/evdq7d68KCgpUUlKi3/72txowYID++te/6q9//WvwfRMnTtRBBx2kvn376q9//au+853v6Pzzz9drr72m119/XRs2bNCGDRvafF4rYJTMgDQ1NVXjx49XQ0ODXnjhBd15553avn27JOn999/XjBkz9PLLL+uCCy5QS0uLDj/8cF1++eVhAZYkjRs3Tlu3blX//v2DAfG///1vnXnmmZo/f75OOOGEsED5s88+04ABA9rsBwAQGdIFAQBRs3TpUj377LM67bTTOg2wQr377rvB0TCPx9PmlpGRoS+++KLTfVx99dXat2+fXn755bBArKKiQk8//bQOP/xw5eXlqX///iorK1NhYWEwFW7gwIEqKChQQUGB+vfvr0GDBgXf/49//EMjRozQTTfdpE8//VQjRozQiBEj9OCDD6qmpkYLFy5UTk6Onn322eDt+uuv16pVq4L7GDhwoJYsWaLU1FTV1tbqzjvvlCQ98cQTqqqqUlVVlY488kjdeuut2rt3r3bs2KEvv/yyTUD53nvv6bvf/a4kqbKyUuecc45uuOEGXXDBBZKk3//+99q7d6+uueaaNvXT3Nys0047Taeccop27dql2tpaTZ06VZdeeqnGjRunG2+8URdeeKH8fr+WL1+ucePGacaMGe0GvQCArjGSBQCIii1btuhHP/qRvF6vJHMu0fe//33de++9Ovroozt83zHHHKNVq1a1O5JlGIaampo0YMCADt8/b948vfLKK/rDH/6goUOHhj13yy23tFns4rjjjtPq1auVlZWl4uJiTZo0SZJUW1urn/3sZ/rlL38ZfG1GRkawHJaTTz5ZGRkZ+vWvf63c3FytXLkymNonSf3791d6enrYMa3UwNtvv12bN29WRkaGsrOzVVBQIMkc1cvMzFSfPn3U3NysAzP5/X6/3njjDT355JOSpJKSEr366qt6+umnlZOTo6ysLNXU1CgjI0ODBg2Sz+fT0KFDtXr1aklSenq63n77bZ177rl6++23dccdd8gwDGVmZurKK6/U/Pnz9eqrr6qqqkqTJ0/WzTffrLvuuqvDOgcAdI6RLABAr1VWVurMM8/UmDFjNGHCBElSZmamcnJyNGHCBL3zzjsdvjcvL0+jRo0KzlMKvR1yyCE64ogj2gQtlvLycl177bWaMmWKvve974U9t3jxYs2dO1cHHXRQ2OMZGRm6/fbbVVlZGXY766yzlJmZGfZaK2A8UEVFhe6//3794he/CAuwJDMgsoKzUIFAQNu2bdONN96o3NxcTZ06NTha9/HHH2vmzJnyer3KyMgIjnZZFi5cqJ07d+rll1/WD3/4Q1111VU6/vjjlZ2dHfws48aN0+OPP67Kyko9/PDDbeqsuLhYy5cv14UXXqjRo0frpJNO0jvvvKNXXnlFb775pr797W+rrKxMH330ke6++25GsQCgFwiyAAC98uWXX+rEE09Udna2Xn755eDcntTUVL3yyisaN26cTjvtNL311lsd7mPLli3tpgr279+/02M/8cQTqqmp0SeffNJmJbz33ntPJ554on7605+GPZ6SkqK77rqrzbH+8Ic/dBhY1NXVBW+BQEB9+/bVokWLdOihh+qss84KO3ZTU1ObYG3v3r1qaGjQb3/7W02fPj1Y9gPTBSsrK7Vjxw7dcccdwffW19frtttuU2Fhoc4++2x97WtfCy6Y0Zn2AtOXXnpJv/rVr/S73/1O5557rtasWaMlS5Zoz549Ouyww1RdXa2LL75Y1113XburLAIAIkOQBQDosbffflvHHnusCgsL9dZbb7VZRjwtLU0LFizQ2LFjdc4552jp0qXt7sca+fnggw+Cgcdzzz2nPn36dHr81NRU3X///fr888+Dqw5afvGLX+jVV18NW9Ah9DnDMMJu5513XofHsZZIz8vL09tvvy1J+u53v6thw4Zp6dKlWrBgQfC17QVZv//97/Wtb31LkoLPWemCBQUFwXTB4uJi9evXL7jghGEYuuyyy1RZWans7Gz98Ic/1CmnnBKsr0AgoHvvvVcFBQVavny5rrnmGhUUFOj6668PO355ebnOO+88/fznP9fXv/51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ydyeMkVyyVXBAQAAkDwIspBYmpqkqVPN7e9/nyALAAAAtiNdEAAAAACiiCALAAAAAKKIdEEklEBA8n61/c470rdPkbzeTt+SlAIBaflyj955Z6BycjyaMMH5egoEpHfflXbskPr3l044wfkyubVclCnyMvE9p0yJXia+4/FZJrdyY1258XseEcNBFRUVxrBhw4zy8vKIXv/2228bBx98sFFcXGzMnj077LkFCxYYQ4YMMfr372+8/PLLYc/9+te/NsrKyozhw4cbf/3rX7tVxn379hmSjH379nXrfei+pqYm47XXXjOampp69P4//MEwRgyoMwzJMCQjW3XGoEHm42j1hz8YxqBBwWoyJMPxenJjmWJRrt5+x2NRpmigTJTJwnecMiVDmaLxPXejZPn3661IYwPHgqyKigrjuOOOMyRFFGTt3r3byM/PN2bOnGls2LDBOProo42//e1vhmEYxmeffWakp6cb//u//2t8+umnxte//nVj3bp1hmEYxptvvmlkZmYar732mvHee+8Zw4cPNyorKyMuJ0GWfXpz0vrDHwzD4zGMbIUHWR6P+bjTjXW3sOop9GQlGY7WkxvLFKtyRaMjwW11RZkoUyi+45QpGcqUiEFWMv379VaksYHHMAzDiRG0k08+WZMnT9YNN9yg8vJyDRs2rNPXP/LII3rmmWe0Zs0aeTweLVq0SAsWLND//d//6Wc/+5nWrVunN998U5L06KOPqqKiQrNmzdI555yjfv366emnn5Yk3XjjjTr00EN1xRVXRFTOmpoa9enTR/v27VN+fn6vPjM65/f7tXjxYp1xxhlK68aqgIGANGyYtHWrlK161StXkpSjOjUoRx6PNGiQVF4eJ8PLMRJaTx3Jy5N++lMpxabZmi0t0jPPSHV17ilTLMsVCAT03//+V1/72tfk7eaX0Y11RZko04H4jlOmeClTb9oGPW2vuFU8tg+cbNtFGhs4FmSVl5dr+PDh8ng8EQVZU6dOVVZWlp588klJ0o4dO/Td735Xa9eu1YQJE3T66afrlltukSStWLFC99xzj5YsWaLhw4frl7/8pS644AJJ0iuvvKJ33nlHTz31VLvH8fl88vl8wfs1NTUaPHiwKisrCbJizO/3a9myZZo4cWK3TlrLl3s0caI5vdCrZp2rVyVJr+pcBUKmHS5b1qzx4x35urtCaD0BAICetQ162l5xq3huHzjRtqupqVFJSUmXQZZjNTp8+PBuvb6mpkYjR44M3s/Pz9f27duDz4XuL9Ln2nP//fdr5syZbR5funSpsrOzu1Vm9MyyZcu69fp33hkoabQkKaBULdT3233dkiWfqL5+W2+LF7dC66kzxxyzU4MGddIdGUVbt+bq44/7dfk6O8skubNclCkylCkylCkylCky8Vym3rQNuttecat4bh840bZraGiI6HVxE7ampqYqIyMjeD8zMzP4IXv6XHtuv/123XTTTcH71kjWKaecwkhWjPW0Zygnx6M5c7p+3emnH6nx44/oRQnjW6T19MADJRo/vjj2BZLVe9b16+wskxS7cvWm99ONdUWZIpNMZeI7HnuUKTKRlqknbYNEG8mK5/aBE227mpqaiF4XN0FWUVGRKioqgvdra2uVnp7eq+fak5GRERaUWdLS0hLiP1I86G5dT5hg5uVu2yalGG3TBa283QkTUpN6TlZoPbWXJOxEPbmxTHaUqyfnEzfWFWWiTB3hO06ZkqFMidI2TNZ/v56K9N88bi5GPGbMGK1YsSJ4f+XKlRo4cGCvnkNi8HqlRx81tzPl0wJdoAW6QBnyyeMxH3/kkeRe9EIKryerXixO1ZMbyyS5s1yUiTJRJspEmeK7TG4VWlcH4t+vF2xY6bBTOmAJ93379rW7JGZFRYWRmZlpLFu2zGhqajJOO+0049prrzUMwzA++eQTIycnx/j000+N2tpa48gjjzQeeughwzAMY9GiRUb//v2NrVu3Gjt37jQGDhxoLFy4MOLysYS7faKx9O+Q4vAl3AcPZvn2A/3hD4bRv3/4cqhO11N718FwukyxKFesriHkdF1RJspk4TtOmZKhTIm4hLthGMbChW2XS0/Ef7/ecv0S7pYDVxccNmyYHnnkEZ1zzjltXvv000/r+uuvV25urgoKCrRixQr17dtXknTnnXfqoYceUmZmpkaMGKF3331XWVlZMgxDP/rRj/SHP/xBknTSSSfp9ddfl+fAsLgDLOFun2gsifrSb+o15UpzCfejRtTpo7U57u7lcMgHH0jHHSfl5DTptddSXJFK6carzEe7XNFa9teNdeXWMv39781asuQTnX76kXzPbSgT33H7y8R3PLIyvfii9OMfm0uRV1X1rkyJtoS7pbpaKiw0t+fOlYYOdc+/n5u+55HGBo7PyTow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xyr7q0bwqFGjtGbNmk7fU1lZqSFDhgTve71eeb/qwu/suVWrVun0008PPnfsscfqnnvu6fA4Pp9PPp8veL+mpkaSmZLo9/sj/YjoAb/fHxzJKikJyO9v6dmO0tPNvyEpo91RWChJadq925Df37N9xNr27R5JqSora5Hf37OzvfV95nttH+rcftS5vahv+1Hn9igokKQ0tbRIu3a5s85b2wZG2LSZROCm73mkZXAkyKqpqdHw4cOD9z0ej7xer6qqqlRotnDbOProo7Vo0SKNGTNGgUBA8+bN08SJE7t87sBj5efna/v27R2W7f777w+mGoZaunRpMChE7FRXH/nV3w1avHiDI2Wor0+VdKZqaz169dU3lZHRw2AvhpYvP0jSYfL7t2vx4o97ta9ly5ZFp1CIGHVuP+rcXtS3/ajz2MvLO021tRlatOh9DR3qvjr/17/6STpO6enVWrz4HaeLExNuqPMGKyezC44EWampqcrIyAh7LDMzUw0NDR0GWU888YQmTZqkDz74QJs2bdKXX34ZTPvr7LkDj2UdpyO33367brrppuD9mpoaDR48WKeccory8/N7/JnRNb/fr1mzzJHD73xnhM444+vd34nPJ+8110iSAk8+KR3wPYuEYUhTpxpqavLoqKNO07Bh3S9GrL37rpnpe9RR/XXGGWf0aB9+v1/Lli3TxIkTlebUUo5Jhjq3H3VuL+rbftS5fQYNStXatdJBB31Lzc1vua7OzZEsacSIPj1uG7iVm77nVpZbVxwJsoqKirR69eqwx2pra5VupXm144gjjtDmzZu1bt06XXLJJZo6dWpwhKqz54qKilRhXd02guNkZGS0CQAlKS0tzfF/1GRgpQsOGJDasyXcm5qkrwLslKee6vE68H37Slu2SFVVaRoxoke7iKk9e8y//fp5lZbWu5Uv+G7bjzq3H3VuL+rbftR57PXtK61dK+3dm6r8fPfVudU26N8/RWlpiXmVJjfUeaTH79a/wNKlSyUpbLn18vJy+f1+NTQ06Nhjj41oP2PGjNGKFSvC9uHz+VRUVNTp+7xerxoaGrR+/XrNmDEjoucOPNbKlSs1cODAiMoJ+/V64YsocfviFyx8AQCAvVpXH/Y4W5AO0DZwl24FWZdddplWrlypcePGye/3KxAI6LzzztOrr76qjIyMsAUjOjNu3DjV1NTohRdekCTd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3HHyeDztBjm1tbWaNm2avvjii+BjTz/9tLZt26Y33nhDJ554ourr67tVlm3btqlfv35auXJl8LGXXnpJI0eO7HXgc/XVV7f5HJ9//rlWr14dvO/1erVu3Trde++9vToWgO774x+l4cMlv9+8/8UXtA0SEQtfuNwf/yidf7504G/utm3m4wsXSt/7HmVyI+oJcJesrCyVlpbqsssua/Ncc3OzPvjgg3YX9Jg3b54OPvhgnXLKKcHHvF6vcnJyNH78eD399NNauHChLr30UknSZZddpoKCAj3yyCOSpMmTJ6u2tlZ//etfg3ObXnrpJY0bN06LFy/W2WefrZSUFNXV1amurk7Dhw+XZF7j65lnntGkSZMi/ox/+9vf9MUXX+j555+XJDU0NOjUU0/V1q1b1djYqK997Wv661//qszMTD311FMaPXq0fvCDH+jrX/96xMcA0HO0DZIHQZaLBQLSDTe0/Y8otT522WXm6Ihdc5JbWqRnnum4TB6P9LOfSWefbabGOcIFs0e7+rdzRT0BScjj8Sg1teOfPsMwwpalb2lp0cMPP6yzzz67zWut/SxYsKDDFfeefPJJrVixQqtWrQoGWPX19ZozZ46effZZnXrqqbrtttvk9Xo1a9YsrV69WvPnz5dkrubo7eYJYsaMGXrssceC93/1q19p0KBBeuedd9TY2KhjjjlG8+fP12WXXab09HTNnDlT9913XzAoAxA7tA2SC0GWi737rrR1a+evqa2VZs+2pzyRMAxpyxaz7Cee6EABcnKkigoHDhyuq387x+sJiLbO0uW8Xik0COnstSkp4de3a++1OTndL5/MkSGfz6dnn322zXOGYai4uFiNjY3KCjn+3LlztXHjRqWmpmr06NHavXu3UlJStG3bNp1xxhnBi/O2tLRo4sSJeu6554LvXbNmjaZNm6bf//73GjBgQPDxBx54QLt27VK/fv2UlpamqVOn6rPPPtPWrVsVCAQ0evRoSdJjjz2mb4XmG3dh165dqq6u1pFHHhl87OCDD9Zll10mj8ejrKwsHXzwwdqzZ0/w+UmTJunmm29Wc3Nzp8EngN6jbZBcOKO62I4dkb3ujDOkQw6JbVksa9dKixd3/bpIy56oIv38yV5PSCCdXQDujDOkN95ovV9WJnW0wMP48ebqPpZhw6TKyvDXdHPOkmEY2r9/v4499lht7aLnKhAIyOfzKSMjQ3v27NGdd96p73znO5Kk9957T2lpafJ4PMrNzdXLL7+sH/zgB9q5c6cMw1Bzc3NwPz6fTxdffLF+8pOf6Mwzzww+/uGHH2rOnDkqLCwMPrZp0ybNmjVLp512WvCx0047TY2Njd36nKtXr9aYMWPCHvvBD34Q3P7kk0/097//Xffff3/wsbS0NA0fPlxffvmlvva1r3XreAC6h7ZBciHIcrH+/SN73bRp9vV4vP12ZEFWpGVPVJF+/mSvJ8AOe/bs0WmnnabKykr16dNHeXl5qq2tVW1tbdgIk2TOzTr44IP12muv6fHHH9fZZ5+tfv36qbGxURkZGZIUnN80aNCg4Ps8Ho/SQtZg/u1vf6v9+/dr4sSJYft/6aWXdOONN+q1114LPpaSkqIf//jHYfPBduzYodtuu61bn3P37t3q28F1IqZOnaoXX3xR9957r775zW+GPVdWVqbdu3cTZAExRtsguRBkudgJJ0iDBpmTIdvruPV4zOdPOCG5yxRm/37p9NPN7SVLwtOObOT6egKira6u4+cOnFxgXWCvPQdOMN28ucdFspSUlGjDhg368Y9/rEGDBmn06NH617/+pYqKCp177rny+XzB+VLDhg0LptvdcsstamlpabMc+qeffqrBgwd3ml7n9Xp13333adasWfr5z38eDH5++ctfKiUlJSzIkqTnn3++zUhWd+Xk5Kiug3+HOXPmaMyYMbrlllt0yimn6Oijjw4+V1dXp9zORiIBRAVtg+TCEu4u5vVKjz5qbofMww67/8gj9k6OdGOZwrS0SMuXm7eWFocKEQf1BERbTk7HtwMXhejstQd2jLT3ml6or69XdXV1cMn1Dz/8UL/5zW9UXV2txx57TP/+97+Dr83Ozm43+Hjttdd00kkndXqcH/3oR7rtttt00EEH6YEHHgg+npGRETbiZbnqqqt02GGHBW/vvfdetz/b0KFDtWnTpnafKyws1DXXXKPzzjtP8+bNC3uuvLw8bFQOQGzQNkguBFku973vmct5DhwY/vigQc4t8+nGMrkR9QS4z9KlS/Xss8/qL3/5iyRp2rRpqqqq0pQpU7R7926de+65nb6/pqZGf/zjH9tdVj30+lbW3K27775bTz/9dJcXLH766ae1evXq4O3b3/52tz/bqFGjtG7durDRrEsuuSTsIsrp6elhKxZu2rRJBQUFKigo6PbxAHQfbYPkQbpgHPje98zlPN9915wM2b+/OZTsZE+HG8vkRtQT4C6zZs3SEUccod/97neaP3++PvzwQ51zzjmaMGGCTj/99LAFKdozffp0lZaWavLkydqyZUvw8bq6On33u99tkwZ43nnn6Z577tF9992nX//61x3u96qrrgobNQu98HGkPB6PLrnkEs2ePVvTp0+XJPXt21eXXXaZnn/+ee3atUsLFy7U4pCJtbNmzdJVV13V7WMB6DnaBsmBICtOeL3uW87TjWVyI+oJcN7ll1+upUuXas2aNRo9erQaGxs1fPhwjRkzRmvXrtX+/fv1z3/+UwsWLNAZZ5yhnJC0xJaWFrW0tOipp57SY489pldffTV4MeK9e/fqkUce0eeff64vvvhCZWVlYce1RrN++MMf6tZbb9XgwYMlta5iaK1I+PTTT7eZk2UYRnClw0jdcsstGjNmjM4880yNHj1av/jFL/T//t//09ixY1VaWqonn3xSxx9/vCTpjTfe0MaNG7lGFuAA2gaJjyALAJDwZsyYoaeffjoYsLz00ktasmSJZs2apbq6Or3//vvatm2bfvnLX2rr1q268cYbg+9tamqSz+fTf/7zH/3iF7/Q5MmTJUmlpaV65pln9Pnnn6uoqEivvfaaUlNTNXfu3LBjn3/++Tr//PPDHmtqatJf/vIXff/731daWlq7o0mXXnqphg0bpnfeeSfiz5mdna358+frlltu0ZIlS5SVlaXnn3++TSAVCAT0wAMP6He/+13YxZcBANFBkAUASHiDBw8OriAoSVOmTNGUKVNkGEYwyBg2bJieeuqpNu8NXbjiQFOnTu1ReawFKqy0vmg6/PDD9Ubodcna4fV6tXz58rA6AQBED0EWEk/ItWYAoDOJOooTSfBEgAUAsUOQhcSSkyN9tTQzAAAA4AS6sQAA3WK0dxVNJDT+zQGgewiyAAARsS6i29DQ4HBJYDfr37y9CykDANoiXRCJpbFROu88c/sPf5AyM50tD5BAvF6vCgoKtHv3bknmSnZun9PU0tKipqYmNTY2MgepBwzDUENDg3bv3q2CgoKwCxkDADpGkIXEEghI1oU2AwFnywIkoH79+klSMNByO8MwtH//fmVlZbk+IHSzgoKC4L89AKBrBFkAgIh5PB71799fZWVl8vv9ThenS36/X++8847GjRtHqlsPpaWlMYIFAN1EkAUA6Dav1xsXDW+v16vm5mZlZmYSZAEAbEOCOgAAAABEEUEWAAAAAEQRQRYAAAAARBFzsrpgXYCxpqbG4ZIkPr/fr4aGBtXU1PR87kR9fet2TQ0rDHYiKvWNbqHO7Ued24v6th91bj/q3H5uqnMrJujqIu0EWV2ora2VJA0ePNjhkqDbBgxwugQAAABIQLW1terTp0+Hz3uMrsKwJNfS0qLt27crLy+Pa6zEWE1NjQYPHqwtW7YoPz/f6eIkPOrbftS5/ahze1Hf9qPO7Ued289NdW4YhmprazVgwIBOL3LPSFYXUlJSNGjQIKeLkVTy8/Md/w+UTKhv+1Hn9qPO7UV92486tx91bj+31HlnI1gWFr4AAAAAgCgiyAIAAACAKCLIgmtkZGRo+vTpysjIcLooSYH6th91bj/q3F7Ut/2oc/tR5/aLxzpn4QsAAAAAiCJGsgAAAAAgigiyAAAAACCKCLIAAAAAIIoIsmCbRYsW6Wtf+5pSU1N15JFHau3atV2+Z/LkyfJ4PMHbySefbENJge6bO3du2HfVus2dO7fT940aNSrs9VdccYU9BQa6obKyUsOHD9fmzZuDj/XknC5xXoc7Hfgd7+k5XeK8DhNBFmyxadMmTZ06VQ888IC2bdumb3zjGxGddD766CN99tlnqqqqUlVVlRYtWmRDaRPD9ddfH3aS//rXv97le5YvX65DDjlEJSUlmjNnjg2lTBwXX3xx8HtaVVWlLVu2qKSkRCeccEKH72loaNCmTZu0e/fu4Psef/xxG0sdn9pr8K9evVpjxoxRYWGhpk2bpkjXdFq4cKGGDh2qAQMG6JVXXolRieNbZWWlJk2aFFbfPT2nS5zXI9Xe97wn53WJc3tX2vuO9+ScLnFej1RHnTQJdS43ABv86U9/Mp555png/b/97W9GVlZWp+/ZunWr0a9fv1gXLWEdf/zxxhtvvGFUVVUZVVVVRk1NTaev3717t5Gfn2/MnDnT2LBhg3H00Ucbf/vb32wqbeK59957jZ/85CedvuYf//iHMXbsWJtKlBgqKiqM4447zpBklJeXG4ZhGI2NjcawYcOMK6+80ti4caNxxhlnGM8//3yX+/rss8+M9PR043//93+NTz/91Pj6179urFu3LsafIP6cdNJJxqOPPhpW5z05pxsG5/VItfc9N4zun9cNg3N7JNr7jh8oknO6YXBej8TGjRuNwsJC43e/+52xc+dO4/vf/77xrW99K+HO5QRZcMRTTz1ljBo1qtPX/PGPfzRKS0uNgQMHGtnZ2caFF15o7N2716YSxje/32/k5+cbtbW1Eb/n4YcfNg4++GCjpaXFMAzDeO2114wpU6bEqogJbf/+/UZZWVmHP9aWOXPmGIMGDTJKSkqMPn36GFdddZXR2NhoTyHjVHuNoVdffdUoLCw06uvrDcMwjE8++cT49re/3eW+brjhBuPUU08N3n/kkUeMO++8Mybljmf//e9/DcMwOm2ARnJONwzO65Fq73vek/O6YXBuj0RX3/FIz+mGwXk9Eh110iTauZx0QdiuqalJs2fP1lVXXdXp69atW6cjjjhCb7zxht5//32Vl5fr9ttvt6mU8e2zzz5TS0uLjjzySGVlZem0007Tl19+2el7Vq1apQkTJsjj8UiSjj32WH388cd2FDfhvPzyyzruuOM0bNiwTl+3fv16fec739E//vEPvfXWW1q2bJkefvhhewoZp/73f/9X119/fdhjq1at0tixY5WdnS3JnA+xZs2aLve1atUqffe73w3e5zvfvuHDh3f6fKTndInzeqTa+5735LwucW6PRFff8UjP6RLn9UhMmjRJP/3pT4P3169frxEjRiTcuZwgC7abPn26cnJyuszfv/3227Vs2TIdccQROvzww/Xggw9q4cKFNpUyvq1Zs0bf/OY3NW/ePH366adKTU0NO6G1p6amJuyHJj8/X9u3b491URPS008/HVGD8+mnn9Yrr7yib37zmzruuON099138x3vQnuNoQO/ux6PR16vV1VVVZ3ui+98dER6Tpc4r0eqve95T87rEt/zaIj0nG69lvN65EI7aRLtXJ7qdAGQXP72t7/piSee0Pvvv6+0tLRuvbesrEx79uyRz+dTRkZGjEqYGKZMmaIpU6YE7z/55JMaPny4ampqlJ+f3+57UlNTw+o1MzNTDQ0NMS9rotm4caM2btyoiRMndvu9ZWVl2rZtWwxKldgO/O5Krd/fwsLCiN/Hd777enNOlzivd0dPzusS3/Pe6s05XeK83pXQTpr/+Z//SahzOSNZsE15ebkuuugiPfHEExo5cmSXr7/wwgv1j3/8I3h/xYoV6tu3Lz/EPVBWVqaWlhbt2LGjw9cUFRWpoqIieL+2tlbp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",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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qjk8EzV69GgNGzbMmv7000/zfR6rbNmyMsZo2rRp1hWy559/Xlu3btWPP/6Y5yhr2VfAunfvrieffFLx8fEqX7689u3bZ9229cknn2jMmDE6evSo0tPTHa5IlSlTxrp10c/P76oj4iUnJyshIUGNGzfWV199JenybZK5DXgxZ84cxcbGauzYsQ7z09PTc70tUro8oIWLi4tGjRqlUaNG5ajnyitiu3fvVu3ata3pd999V97e3tZtkO3bt9cTTzwhT09P7dq1S5IUEhKic+fOSZKaNm2aY9CN1q1bq1WrVtq3b58aN26ssLAwvfvuu6pVq5Z1e9+zzz6rli1b/qXBIXbt2qUmTZrkuuyzzz7TRx99pDlz5jgcb+fOna2BSvJy1113OUwfOHBAK1eu1LRp0xzmV65cWe7u7jpz5ozDrYwA4EwEKQC4Tk6cOKH27durZMmS+vTTT/XII49Iuvz8zZIlS9SlSxe1bdtWK1asyPcZk5MnT+Y6NHf58uUVGxuba5vMzEwlJibm+byRt7e3w2ARvr6+uT47denSJf34449XvR3xpZdekiQlJSU5zE9LS5MklShRQq6urrpw4YKky7fPZf85OTlZWVlZcnV1zRFgstvPnz9f8fHx+dYgScHBwdbnfKXswRey9yddDphdunSxhnN/+eWXrX3m9rzV8ePHVbNmTUVHR+ubb76RlPPWvh07dig4OFiXLl1yGGFw9erVWr9+vR588EG1bdtW8+bN0+7du696PH8OUhcvXtSAAQP02muv6auvvtIzzzyjO++8U6tXr9bTTz+t4OBg9erVS23bttUHH3ygBx988Kr7yE1sbKxq1aqV67Ls57u2b9/ucPtjqVKlCjxs+fnz59WzZ099++236tu3b67P2FWoUEGnT58mSAEoNnghLwBcBxs2bFDDhg0VFBSkdevWyc/Pz2G5h4eHli1bpkaNGumhhx7S+vXr89xWdrjYtm2b4uLiFBcXp3nz5uUZkqTL/9IfFBRkXd34/PPP1bt3b02YMMHWcfTv31/GGOsnISFBtWvX1scff+wwP/unUaNGDu0vXbokPz8/K6SlpKRIkvXZBAUFqV+/ftbVury88cYbOnDggKpUqaIqVarI29tbL7/8skJDQ615mzZt0gcffJBr+8WLF8vPz09+fn6qXr26pMvhrnHjxvL29tbrr7+uixcvSso7SD322GN66623HEYGDAwMVGBgoPX7DQgIUJkyZRQSEmKFoKNHj6pv377y9fVV7dq19eSTT6pq1aoOI+/dcccd1qiB2dvcunWrw/5XrFih8PBwnTlzRgcPHlTz5s21bt06dejQQVOmTNGvv/6qGTNmKC4uTq+88oq6deumUaNG5fu55sXV1TXP5+mqVq2q/v3766OPPtIvv/xizTf/f7TCvH6u5O3trfvvv1+33367PvvsM8XExOTYz5UjEgJAcUCQAoAilJGRoRdeeEEPPPCAWrdura+//jrfq0Kff/65atSooYcfflinT5/Odb3s28f8/PysL9m+vr75fsnMHgo9+0t/fHy8Tp48qd9++03S5ZcGHz9+3Po5d+5cji/Oc+fOtd4Jlf0TGBioPXv26Omnn86xLPvnylCUfSufdHkwiBIlSlhh8MqfAwcO5HvFydPTU//+9781bNgwDRs2TJMnT5Z0eSTE7HnffvttjpELsz322GM6e/aszp49a91Gl+25555TSkqKNdhESkpKjiB14sQJbdu2TfXq1XOYf+HCBV24cEGJiYmSpISEBP3xxx+KjY1Venq6pMu3RY4aNUqPP/54jrqysrKUnp6uvXv3WgM7ZG/zylBqjNG8efPUo0cPRUVFqUKFCpKkrl276oMPPtBPP/2kIUOGqH379oqKitKQIUOs0QivRfbVoNy88847Gj9+vNzd3R1GF/z444/l4eGR58+VfH19NXToUG3fvl3BwcHWFc0rxcbGWscJAMUBt/YBQBFyd3dXWFiY5s6dm+eQ4Ffy9/fXF198oU2bNuV5C1NmZqaknLfDZX9RL4hevXpZz0g99NBDmjp1qqZOneqwzp/37+npqdq1a1sj/x06dEj16tXT6tWrreek/v3vf6t169by8/PT4cOHddttt8lc8d73K78M33HHHUpNTdWlS5dyhMv4+Hg9+eSTWrRoUa71p6SkqFmzZla4+OOPPzRlyhQ999xz1tWuNWvW5PoslHT5ql720OnZV8Wy+fv769FHH9WSJUs0ePBgJScn53gn19y5cxUSEqL777/fYX72EO7ZITT7fUipqamKjo7WHXfcoZIlS+rll1/W888/n6Ou7ADWu3dva17Hjh0lyeEqTXp6upYsWSIfHx+5uLioXr16+v777yVJbdu2VbVq1dS1a1d16dLFCt4dO3a03u3151sE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Mm4q7s4uALDL3d2dt4MDAIBC4+rqqsDAQGeX8Zd4e3s7u4SbDlek8Jf99NNPuvvuuxUQEKAuXbooPj5eCxYs0H333Wet8+dL5t98843Cw8Pl5+endu3a6dSpUwXeX16X0+fOnatKlSqpUqVKWr9+vcOyqKgo3XnnnQoMDNQzzzyj1NRUa9mcOXMUGhoqPz8/denSRUlJSZL+d4l8woQJCgwMVFhYmDZv3lzgOnFjuO+++9SnTx/dcssteuKJJ9SnTx/5+flp1apV2rx5s+rVqydfX181bNhQMTExkv7XR1etWqXKlSurVKlSevfddx22m9eyvLb5/PPPy8XFRd9995369OkjFxcXPf/881ddlt82C1Inbh7R0dFq3LixSpYsqXvuuUd79+61luXVR3I7/2eLi4vT/fffL39/f/Xo0UMXL16UJP3jH/9Qhw4drPUOHz4sb29vq+2SJUsUFhamEiVKqE2bNjp37pxDnXmdkxcuXKjbbrtNZcqU0auvvqrst7u0bt1ac+fOtdZ799131blz58L4yPA3kt+5XMr91r6CniMvXryou+66SxMmTLDmbdy4UXXr1lVQUJCeeOIJXbhwQVlZWSpZsqSOHj2q//u//1P58uUlSY888oimTp0q6er9X5L279+v8uXL6+uvv3aYz6191x9BCn/JhQsX1K5dO7Vr1067du1SQkKChg4dmm+bY8eOqVOnTnrppZcUExMjf39/DRo06C/VsXPnTg0aNEizZs3S2rVrtXTpUmvZ4cOH9eCDD2rw4MH66aeftG3bNr311luSpL1796p///6aO3euYmJi9McffzhcFl+zZo2OHj2q6Oho3XPPPRo1atRfqhN/T8eOHdOCBQu0ZMkSNWjQQN26ddPq1avVrVs3denSRUePHlWzZs00bNgwq80ff/yhN954Q2vWrNGECRM0dOhQpaSk5LssKysrz21Onz5dcXFxuueeezRr1izFxcVp+vTpV12W3zavViduHvHx8Wrbtq06dOigAwcOKCIiQj169JCUdx+52vl/1apV6tmzp37++WcdOHBAkZGRkqRHH31U33zzjRISEiRJK1asUJs2bRQQEKDExET16tVLkydP1t69e+Xu7m59wZTyPidv3LhRzzzzjKZNm6ZvvvlGH3/8sRYvXixJ6tq1q6KioqxtrF27Vt26dSvaDxTFUl7n8vxc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",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 加载数据集\n",
    "def load_data():\n",
    "\n",
    "    data = pd.read_csv(r'C:\\Users\\31351\\Desktop\\20221202663-exp1.赖\\实验5\\src\\iris.csv', header=None)\n",
    "    \n",
    "    # 第一行是标题行，需要处理\n",
    "    if data.iloc[0, 0] == 150:\n",
    "        # 如果第一行是标题行，删除它\n",
    "        data = data.iloc[1:].reset_index(drop=True)\n",
    "    \n",
    "    # 分离特征和标签\n",
    "    X = data.iloc[:, :4].values.astype(float)\n",
    "    y = data.iloc[:, 4].values.astype(int)\n",
    "    \n",
    "    return X, y\n",
    "\n",
    "# 主函数\n",
    "def main():\n",
    "    # 加载数据\n",
    "    X, y = load_data()\n",
    "    \n",
    "    # 打印数据集信息\n",
    "    print(\"数据集形状:\", X.shape)\n",
    "    print(\"类别分布:\", np.bincount(y))\n",
    "    \n",
    "    # 划分训练集和测试集\n",
    "    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)\n",
    "    \n",
    "    # 标准化数据\n",
    "    scaler = StandardScaler()\n",
    "    X_train_scaled = scaler.fit_transform(X_train)\n",
    "    X_test_scaled = scaler.transform(X_test)\n",
    "    \n",
    "    print(\"训练集形状:\", X_train.shape)\n",
    "    print(\"测试集形状:\", X_test.shape)\n",
    "    \n",
    "    # 测试不同的K值\n",
    "    k_values = range(1, 21)\n",
    "    accuracies = []\n",
    "    \n",
    "    print(\"\\n测试不同的K值:\")\n",
    "    for k in k_values:\n",
    "        knn = MyKNN(k=k)\n",
    "        knn.fit(X_train_scaled, y_train)\n",
    "        y_pred = knn.predict(X_test_scaled)\n",
    "        accuracy = accuracy_score(y_test, y_pred)\n",
    "        accuracies.append(accuracy)\n",
    "        print(f\"K = {k}, 准确率 = {accuracy:.4f}\")\n",
    "    \n",
    "    # 找出最优的K值\n",
    "    best_k = k_values[np.argmax(accuracies)]\n",
    "    best_accuracy = max(accuracies)\n",
    "    print(f\"\\n最优K值为 {best_k}，准确率为 {best_accuracy:.4f}\")\n",
    "    \n",
    "    # 使用最优K值测试不同的距离度量\n",
    "    distance_metrics = ['euclidean', 'manhattan', 'chebyshev', 'minkowski']\n",
    "    metric_accuracies = []\n",
    "    \n",
    "    print(\"\\n不同距离度量的准确率:\")\n",
    "    for metric in distance_metrics:\n",
    "        knn = MyKNN(k=best_k, distance_metric=metric)\n",
    "        knn.fit(X_train_scaled, y_train)\n",
    "        y_pred = knn.predict(X_test_scaled)\n",
    "        accuracy = accuracy_score(y_test, y_pred)\n",
    "        metric_accuracies.append(accuracy)\n",
    "        print(f\"{metric}: {accuracy:.4f}\")\n",
    "    \n",
    "    # 与sklearn的KNN进行对比\n",
    "    print(\"\\nScikit-learn KNN的准确率:\")\n",
    "    sklearn_knn = KNeighborsClassifier(n_neighbors=best_k)\n",
    "    sklearn_knn.fit(X_train_scaled, y_train)\n",
    "    sklearn_pred = sklearn_knn.predict(X_test_scaled)\n",
    "    sklearn_accuracy = accuracy_score(y_test, sklearn_pred)\n",
    "    print(f\"准确率: {sklearn_accuracy:.4f}\")\n",
    "    \n",
    "    # 比较自定义KNN和sklearn KNN的准确率\n",
    "    print(\"\\n比较:\")\n",
    "    print(f\"自定义KNN (欧式距离): {best_accuracy:.4f}\")\n",
    "    print(f\"Sklearn KNN: {sklearn_accuracy:.4f}\")\n",
    "    \n",
    "    # 可视化不同K值的准确率\n",
    "    plt.figure(figsize=(10, 6))\n",
    "    plt.plot(k_values, accuracies, marker='o', linestyle='-', color='blue')\n",
    "    plt.axvline(x=best_k, color='red', linestyle='--', label=f'最优K值 ({best_k})')\n",
    "    plt.title('不同K值的准确率')\n",
    "    plt.xlabel('K值')\n",
    "    plt.ylabel('准确率')\n",
    "    plt.legend()\n",
    "    plt.grid(True)\n",
    "    plt.show()\n",
    "    \n",
    "    # 可视化不同距离度量的准确率\n",
    "    plt.figure(figsize=(10, 6))\n",
    "    colors = ['blue', 'green', 'orange', 'purple']\n",
    "    bars = plt.bar(distance_metrics, metric_accuracies, color=colors)\n",
    "    \n",
    "    # 添加数据标签\n",
    "    for bar in bars:\n",
    "        height = bar.get_height()\n",
    "        plt.text(bar.get_x() + bar.get_width()/2., height,\n",
    "                f'{height:.4f}', ha='center', va='bottom')\n",
    "        \n",
    "    plt.title(f'不同距离度量的准确率 (K={best_k})')\n",
    "    plt.xlabel('距离度量')\n",
    "    plt.ylabel('准确率')\n",
    "    plt.ylim(min(metric_accuracies)-0.05, 1.0)\n",
    "    plt.grid(True, axis='y')\n",
    "    plt.show()\n",
    "\n",
    "if __name__ == \"__main__\":\n",
    "    main()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 7. 结论\n",
    "\n",
    "1. **K值选择**：在Iris数据集上，当K=3时分类准确率最高（0.9778）。K值过小（K=1）容易过拟合，K值过大（K>15）则容易欠拟合。\n",
    "   \n",
    "2. **距离度量**：不同距离度量方法在Iris数据集上表现非常接近，说明该数据集对距离度量方法不敏感。\n",
    "   \n",
    "3. **自定义实现对比**：自定义实现的KNN分类器与scikit-learn中的KNN分类器在相同参数下准确率完全相同，验证了自定义实现的正确性。\n",
    "   \n",
    "4. **算法特点**：KNN算法实现简单，无需训练过程，但预测时需要计算待测样本与所有训练样本的距离，时间开销较大。\n",
    "\n",
    "**改进方向**：\n",
    "1. 实现K-D树或Ball Tree优化距离计算效率\n",
    "2. 加入距离加权投票，让较近的样本拥有更大投票权重\n",
    "3. 使用交叉验证选择最优参数组合"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
